Náhodné hodnoty

Při různých příležitostech (např. hrách) budeme chtít volit náhodné hodnoty - náhodný úhel otočení, posunutí želvy, tloušťku čáry, parametry a jiné.

Pro svoje základní příkazy má Imagine k dispozici hodnotu any (libovolně), například:
fd any - posun želvičky o náhodný počet kroků
rt any - otočení želvičky o náhodný úhel
setpw any - libovolná hodnota tloušťky pera
setpc any - libovolná barva pera - a podobně

Stejnou hodnotu je možné použít i u příkazu pro pozastavení programu:
wait any

Následující procedura bude s náhodnými pauzami kreslit na náhodných místech tečky s náhodnou barvou a tloušťkou (život je jen náhoda :-)):
to tecka
wait any
setpw any
setpc any
fd 0
pu
rt any
fd any
pd
end

Hodnota any se dá použít nejen pro základní příkazy Imagine, můžete je použít jako parametr i pro svoji proceduru. Pokud se ale bude uvnitř procedury opakovat příkaz s parametrem, kterému jsme přiřadili hodnotu any , bude jeho hodnota pokaždé jiná. Například procedura trojuhelnik s parametrem, který určuje délku strany může vypadat takto:
to trojuhelnik :a
repeat 3[fd :a rt 120]
end
Spustíte-li tuto proceduru s parametrem any - trojuhelnik any , potom se nenakreslí trojúhelník, protože při opakování bude každá strana jiná. Navíc jsou hodnoty opravdu libovolné, což většinou nebude vyhovovat, proto budeme hodnotu any využívat jen ojediněle. Většinou budeme chtít nikoliv úplně libovolnou hodnotu, ale spíš hodnotu v nějakém rozmezí. Proto je lepší pro volbu náhodných hodnot využívat příkaz random:


Pro volbu náhodného čísla od 0 do 99 slouží příkaz: random(100), čili pro posun o náhodný počet kroků od nuly do 99 použijeme příkaz fd random(100).
V závorce za random lze psát libovolné přirozené číslo, náhodné číslo je potom vždy od nuly do čísla o jednu menší než je číslo v závorce. Například random(6) volí náhodná čísla od nuly do 5. Jenže nebudeme chtít vždycky náhodná čísla od nuly, jak to zařídit, aby se dal simulovat třeba hod kostkou, neboli volit čísla od 1 do 6? K tomu poslouží následující součet:
1 + random(6)
K jedničce se přičte náhodné číslo od nuly do pěti, takže výsledkem bude náhodné číslo od 1 do 6.

setpw 10 + random(30) - tato ukázka slouží k nastavení tloušťky pera v rozmezí od 10 do 39 (k deseti je přičteno náhodné číslo od 0 do 29).

Pro nakreslení náhodně velkého trojúhelníku je potřeba nejprve vytvořit proceduru s parametrem, který určuje velikost strany:
to trojuhelnik :strana
repeat 3[fd :strana rt 120]
end
Trojúhelník se stranou náhodné velikosti od 10 do 49 bodů potom nakreslíme příkazem:
trojuhelnik 10+random(40)

Pokud bychom chtěli kreslit více trojúhelníků se společným vrcholem, můžeme využít proceduru trojuhelnik s tím, že její parametr bude náhodné číslo, například:
to trojuhelniky
repeat 4 [setpc any setpw 2+random(10) trojuhelnik 50+random(50) rt any]
end


Pokud budete proceduru s náhodnými hodnotami pouštět víckrát, budou se volit vždy stejné hodnoty, abyste při každém spuštění získali jiné náhodné hodnoty, je potřeba použít příkaz randomize



Projekt ulož pod názvem lekce11.imp !

Úkol:

Základní úlohy:

1. S využitím procedury tečka napiš proceduru tečky, která nakreslí padesát takových "náhodných" teček.

2. Napiš proceduru usecky, která nakreslí padesát úseček náhodné délky od 0 do 100 bodů, náhodné tloušťky a barvy.


Úlohy na plus:

1. Doplň proceduru usecky ze základních úloh tak, aby se kreslily úsečky délky od 50 do 200 tloušťky od 5 do 30 bodů.



2. Napiš proceduru pro nakreslení pěti čtverců se společným vrcholem. Použij náhodné barvy, velikosti, nevelké tloušťky čáry (např. od 1 do 5) a náhodné otočení jako na obrázku.
Pozn.: využij proceduru čtverec s parametrem.


3. Napiš proceduru housenka pro nakreslení housenky s náhodným počtem dílků tvořených kruhem (puntíkem) a dvěma nožičkami.






Úloha na jedničku:

Vytvoř proceduru Váza pro nakreslení náhodného počtu náhodně dlouhých a otočených, náhodně barevných květů podle obrázku:


Úloha pro experty:

Doplň úlohu na jedničku o posuvníky pro volbu krajních hodnot délek stonků a velikostí květů.